import fastapi
import uvicorn
import requests
import json
from fastapi.responses import StreamingResponse
from fastapi.middleware.cors import CORSMiddleware
app = fastapi.FastAPI()

# 添加CORS中间件
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许所有来源
    allow_credentials=True,
    allow_methods=["*"],  # 允许所有方法
    allow_headers=["*"],  # 允许所有头
)

url = "https://api.qnaigc.com/v1/chat/completions"
key='sk-b7f232cd1eca5fc9e04c08d8f3a50f157246ab143da43d5e578651836c61d31f'

# 销量分析系统提示
system = """
你是一位专业的销售数据分析师，专注于水果电商平台的订单分析。用户会提供最近7天的订单数据和当天的订单数据，你需要进行以下分析：

### 分析任务要求
1. 当日销售分析：
   - 计算每种水果的总销售量和总销售额
   - 按销售额降序排列展示结果

2. 七日销售分析：
   - 计算7天内每种水果的总销售量和总销售额
   - 按销售额降序排列展示结果
   - 计算每日平均销售量和销售额

3. 趋势对比分析：
   - 比较今日数据与7日平均数据的差异
   - 识别销售增长或下降的水果品类
   - 结合以下可能因素分析原因：
     * 价格变化
     * 季节性需求
     * 促销活动
     * 用户购买行为变化
     * 特定时间段的热销情况

### 输出格式要求
请按以下Markdown格式组织分析结果：

## 当日销售分析
[分析结果]

## 七日销售分析
[分析结果]

## 趋势对比与原因分析
[分析结果]

#用户输入的信息为：
"""
@app.post('/ai')
async def ai(request: fastapi.Request):
    data = await request.json()   # 从请求体获取JSON数据
    prompt = data.get('prompt') 
    global system
    nsy=system+prompt
    def generate():
        messages = [
            {"role": "user", "content": nsy}
        ]  
        headers = {
            "Authorization": f"Bearer {key}",
            "Content-Type": "application/json", 
        }
        data = {
            "messages": messages,
            "model": "deepseek-v3",
            "stream": True, 
        }
        
        response = requests.post(url, headers=headers, json=data, stream=True)
        if response.status_code == 200:
            for chunk in response.iter_lines():
                if chunk:
                    decoded_chunk = chunk.decode('utf-8')
                    if decoded_chunk.startswith('data:'):
                        try:
                            json_chunk = json.loads(decoded_chunk[5:])
                            if 'choices' in json_chunk and json_chunk['choices'][0]['delta'].get('content'):
                                content = json_chunk['choices'][0]['delta']['content']
                                yield content
                        except:
                            pass
        else:
            yield f"Error: {response.status_code} - {response.text}"
    
    return StreamingResponse(generate(), media_type="text/plain")

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)
    